#pragma once
#include "logger.hpp"

/*日志宏
    1.对单例模式获取日志器进行宏替换,获取默认日志器
    2.利用代理模式简化传入的参数，不再传入file ,line
    3.对默认日志器提供对外访问接口，不用获取默认日志器（直接用就可以）
*/

namespace ns_logger
{
    LoggerPtr getLogger(const std::string &name){
        return LoggerManager::GetInstance().GetLogger(name);}
    
    LoggerPtr getRootLogger(){
        return LoggerManager::GetInstance().GetRootLogger(); }

    //2.利用宏进行接口的简化
    #define Debug(fmt,...)  Debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define Info(fmt,...)   Info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define Warning(fmt,...) Warning(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define Error(fmt,...) Error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define Fatal(fmt,...)  Fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

    //3.对默认日志器接口替换，不用再调用
    #define DLOG(fmt,...) ns_logger::getRootLogger()->Debug(fmt,##__VA_ARGS__)
    #define ILOG(fmt,...) ns_logger::getRootLogger()->Info(fmt,##__VA_ARGS__)
    #define WLOG(fmt,...) ns_logger::getRootLogger()->Warning(fmt,##__VA_ARGS__)
    #define ELOG(fmt,...) ns_logger::getRootLogger()->Error(fmt,##__VA_ARGS__)
    #define FLOG(fmt,...) ns_logger::getRootLogger()->Fatal(fmt,##__VA_ARGS__)
};